package gesconda.CBRKBRecommender.actions;

import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;

import gesconda.CBRKBRecommender.data.CSVImport;
import gesconda.CBRKBRecommender.model.CMMethodChar;
import gesconda.CBRKBRecommender.model.CMMethodTable;
import gesconda.CBRKBRecommender.model.CMTaulaMethodChar;
import gesconda.master.controlador.accions.CCAccio;
import gesconda.master.controlador.accions.CCAccioImportarDades.TotsFiltre;
import gesconda.master.controlador.accions.fileformat.FileFormatCSV;
import gesconda.master.controlador.accions.fileformat.FileFormatDAM;
import gesconda.master.controlador.accions.fileformat.FileFormatGSP;
import gesconda.master.controlador.accions.fileformat.FileFormatTXT;
import gesconda.master.model.CMAtribut;
import gesconda.master.model.CMInstancia;
import gesconda.master.model.CMModel;
import gesconda.master.vista.CVMissatge;
import gesconda.master.vista.Messages;

public class CCOpenMethods extends CCAccio
{

	private File lastOpened = null;

	public void actionPerformed(ActionEvent e) {

		JFileChooser triaFitxer = new JFileChooser(lastOpened);
		triaFitxer.addChoosableFileFilter(FileFormatGSP.filtre);
		triaFitxer.addChoosableFileFilter(FileFormatCSV.filtre);
		triaFitxer.addChoosableFileFilter(FileFormatTXT.filtre);
		triaFitxer.addChoosableFileFilter(FileFormatDAM.filtre);
		triaFitxer.addChoosableFileFilter(new TotsFiltre());
		triaFitxer.setDialogTitle(Messages.getString("OPEN"));
		triaFitxer.setApproveButtonText(Messages.getString("OPEN"));

		if (triaFitxer.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {

			if (triaFitxer.getSelectedFile().exists()) {
				lastOpened = triaFitxer.getSelectedFile();
				importar();
			} else {
				CVMissatge.error(Messages.getString("Fitxer.inexistent"));
			}
		}

	}

	public void importar() {
		try {
			boolean ok = CMModel.getInstance().resetTaula(getValue(NAME).toString());
			CMMethodTable method_taula = new CMMethodTable();
			method_taula.taula = new CMTaulaMethodChar(new ArrayList<CMInstancia>(), new ArrayList<CMAtribut>());
			method_taula.mRequirements = new ArrayList<CMMethodChar>();
			if (ok) {
				String ext = lastOpened.getName().substring(lastOpened.getName().length()-4).toLowerCase();
				if (ext.equals(".csv")) {
					CSVImport.readFile(method_taula,lastOpened);
				} else if (ext.equals(".txt")) {
					FileFormatTXT.readFile(CMModel.getInstance(),lastOpened);
				} else if (ext.equals(".gsp")) {
					FileFormatGSP.readFile(CMModel.getInstance(),lastOpened);
				} else if (ext.equals(".dam")) {
					FileFormatDAM.readFile(CMModel.getInstance(),lastOpened);
				}
				CMModel.getInstance().setDirty(false);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
			CVMissatge.error(ex.getMessage());
		}
	}




	/**
	 * File filter per seleccionar tots els arxius suportats
	 */
	public class TotsFiltre extends FileFilter {

		public TotsFiltre() {
		}

		@Override
		public boolean accept(File f) {
			return (f.isDirectory()
					|| f.getName().toLowerCase().endsWith(".gsp")
					|| f.getName().toLowerCase().endsWith(".csv")
					|| f.getName().toLowerCase().endsWith(".txt")
					|| f.getName().toLowerCase().endsWith(".dam"));
		}

		@Override
		public String getDescription() {
			return Messages.getString("Arxius.dades");
		}
	}
}
